#include "rtdef.h"
#include "uip-conf.h"
#include "uip.h"
#include "uip_netif.h"
#include "uip_arp.h"
#include "rtconfig.h"
#include "uip_pbuf.h"

void netif_set_default(struct netif* netif)
{

}
void netif_set_addr(struct netif* netif, struct ip_addr* ipaddr,  struct ip_addr* netmask,
                    struct ip_addr* gw)
{
	uip_ipaddr_t hipaddr;
	uip_ipaddr(hipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
	uip_sethostaddr(hipaddr);
	uip_ipaddr(hipaddr, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
	uip_setdraddr(hipaddr);
	uip_ipaddr(hipaddr, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);
	uip_setnetmask(hipaddr);
	return ;
}

struct netif*
netif_add(struct netif* netif, struct ip_addr* ipaddr,  struct ip_addr* netmask,
          struct ip_addr* gw,
          void* state,
          err_t (* init)(struct netif* netif),
          err_t (* input)(struct pbuf* p, struct netif* netif))
{
	//if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev,
	//eth_init, eth_input) == RT_NULL)
	// netif->uip_hostaddr = ipaddr;
	//netif->uip_draddr = netmask;
	// netif->uip_netmask = gw;
	// netif_set_addr(netif,ipaddr,netmask,gw);

	// call user specified initialization function for netif
	if(init(netif) != 0) {
		return RT_NULL;
	}

	netif->input = input;
	netif->state = state;
	netif_set_addr(netif, ipaddr, netmask, gw);
	return netif;

}
err_t etharp_output(struct netif* netif, struct pbuf* q, struct ip_addr* ipaddr)
{
	return 0;
}
